package com.itqf.ipmsys.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itqf.ipmsys.dto.PoliceFindDto;
import com.itqf.ipmsys.entity.Police;
import com.itqf.ipmsys.mapper.PoliceMapper;
import com.itqf.ipmsys.service.PoliceService;
import com.itqf.ipmsys.utils.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 警员表 服务实现类
 * </p>
 *
 * @author David Sun
 * @since 2021-09-22
 */
@Service
public class PoliceServiceImpl extends ServiceImpl<PoliceMapper, Police> implements PoliceService {

    @Resource
    private PoliceMapper policeMapper;

    /**
     * 查找所有的police信息
     *      判断条件可以为空,为空时返回所有
     *          可以根据检索条件查找符合条件的警员信息
     *          查询条件:用户名、警员编号
     *
     * @return
     */
    @Override
    public R findAllPoliceList(PoliceFindDto policeFindDto) {
        Map<String,Object> data = new HashMap<>(2);
        //1. 创建查询条件
//        QueryWrapper<Police> policeQueryWrapper =new QueryWrapper<>();
        //2. 分页属性:
        //      current:当前页
        //      size:每页显示条数，默认 10
        //      isSearchCount:是否返回总条数
        if (policeFindDto.getPageSize()==0){
            policeFindDto.setPageSize(10);
        }
        IPage<Map<String,Object>> page=new Page<>(policeFindDto.getPage(),policeFindDto.getPageSize());
        //3. 添加查询条件
//        policeQueryWrapper
//                .like(policeFindDto.getNameKeyWord()!=null,"name", policeFindDto.getNameKeyWord())
//                .like(policeFindDto.getNumber()!=null,"id", policeFindDto.getNumber())
//                .eq("deleted", 0);
        //4. 查找警员信息
        IPage<Map<String,Object>> iPage = policeMapper.selectPoliceByPage(page,policeFindDto);
        //5. 数据封装,返结果


        data.put("total", iPage.getTotal());
        data.put("parkingrecords",iPage.getRecords());
        return R.ok(data);
    }

    /**
     *  暂时没用
     *  查询数据总数(无条件,统计所有数据)
     * @return
     */
    @Override
    public int findListSize(){
        return policeMapper.selectCount(null);
    }

    /**
     * 增加警员信息
     *
     * @param police
     * @return
     */
    @Override
    public R addPolice(Police police) {
        Map<String,Object> data = new HashMap<>(2);
        //1. 核验数据:
        //      必须数据:警员编号、所属角色
        //      新建警员的默认数据:新建时间为当前时间,是否有效为0
        if (StringUtils.isEmpty(police.getName())||StringUtils.isEmpty(police.getRole())){
            return R.error(505,"数据不能为空");
        }
        //2. 检验编号是否已存在
        List<Police> policeList = policeMapper.selectList(null);
        for (Police police1 : policeList) {
            if (police1.getName().equals(police.getName())){
                return R.error(506,"警员信息已存在");
            }
        }
        //3. 添加默认数据:时间,是否有效
        police.setAddTime(new Date());
        police.setDeleted(0);
        //3. 执行增加
        policeMapper.addPolice(police);
        data.put("police", police);
        return R.ok(data).setMsg("获取数据成功").setCode(200);
    }

    /**
     * 删除警员信息
     * 逻辑删除:deleted置为 1
     *
     * @param police
     * @return
     */
    @Override
    public R delPolice(Police police) {
        //1. 判断传参是否存在
        if (police.getId()==null){
            return R.error(505, "数据不能为空");
        }
        //2. 执行删除,将deleted置为 1,并将时间更新
        police.setDeleted(1);
        police.setUpdateTime(new Date());
        int row = policeMapper.updateById(police);
        if (row > 0) {
            return R.ok();
        }
        return R.error(506,"删除失败,请查看用户是否存在!");
    }

    /**
     * 更新警员信息
     *
     * @param police
     * @return
     */
    @Override
    public R updatePolice(Police police) {
        //1. 判断传参是否存在
        if (police.getId()==null){
            return R.error(505, "数据不能为空");
        }
        Map<String,Object> data = new HashMap<>(2);
        //2. 执行更新,并将时间更新
        police.setUpdateTime(new Date());
        int row = policeMapper.updatePolice(police);
        if (row > 0) {
            data.put("police", police);
            return R.ok(data);
        }
        return R.error(506,"更新失败,请查看用户是否存在!");
    }
}
